package com.example.hxds.bff.customer.config;

import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


/**
 * 用@Configuration注解来表示这是一个配置类
 * SpringFormEncoder 类在 Feign 库中用于处理 HTTP 表单编码。它的主要作用是将请求的数据按照 HTTP 表单格式（application/x-www-form-urlencoded 或 multipart/form-data）正确地序列化。当Feign客户端需要发送包含表单数据的请求时，SpringFormEncoder 使用 Spring 框架的转换和格式化支持来实现这一功能。
 * 具体来说，它有以下用途：
 * 序列化：将 Java 对象转换为符合 HTTP 表单规范的字符串。
 * 兼容性：与 Spring MVC 的 HttpMessageConverter 机制集成，允许使用多种数据类型和格式。
 * 多部分上传：支持文件和其他二进制数据的多部分上传。
 * 通过继承 Feign 的基础编码器，并利用 Spring 的转换服务，SpringFormEncoder 提供了一种与 Spring 生态系统紧密集成的方式来处理请求正文的编码。这在使用 Feign 与 Spring Boot 结合构建微服务时特别有用，因为它允许你利用 Spring 已有的工具和配置来处理请求数据。
 */
@Configuration
public class MultipartSupportConfig {

    @Autowired
    private ObjectFactory<HttpMessageConverters> messageConverters;

    @Bean
    public Encoder feignFormEncoder () {
        return new SpringFormEncoder(new SpringEncoder(messageConverters));
    }

}